////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  afmonitorelements.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef AFMONITORELEMENTS_H
#define AFMONITORELEMENTS_H

#include "parametermodule.h"
#include "parameterfilesymboltable.h"
#include "parametertypes.h"
#include "afglobalelements.h"

#define AFMONITORELEMENTS_NAMESPACE_BEGIN namespace afmonitorelements {
#define AFMONITORELEMENTS_NAMESPACE_END }

AFMONITORELEMENTS_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixIirFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixIirFltrCfgType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable
    ///
    /// Description:   Flag to enable IIR filter or not.
    /// Range:         [0, 1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// numOfSamples
    ///
    /// Description:   Length of the IIR filter
    /// Range:         [2,2]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 numOfSamples;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coeffNumerator
    ///
    /// Description:   IIR filter coefficient in numerator. An first order IIR filter is designed, the coefficients in numerator
    ///                and denominator are typically required. This parameter defines the coefficient in the numerator.
    /// Range:         [unbounded,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT coeffNumerator;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// coeffDenominator
    ///
    /// Description:   IIR filter coefficient in denominator. An first order IIR filter is designed, the coefficients in
    ///                numerator and denominator are typically required. This parameter defines the coefficient in the
    ///                denominator.
    /// Range:         [unbounded,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT coeffDenominator;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixMvavgFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixMvavgFltrCfgType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable
    ///
    /// Description:   Flag to enable moving average filter or not.
    /// Range:         [0, 1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// numOfSamples
    ///
    /// Description:   Length of the moving average filter.
    /// Range:         [0, 10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 numOfSamples;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixMedianFltrCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixMedianFltrCfgType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable
    ///
    /// Description:   Flag to enable median filter or not.
    /// Range:         [0, 1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// numOfSamples
    ///
    /// Description:   Length of the median filter.
    /// Range:         [0, 10]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 numOfSamples;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixSensProfileType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixSensProfileType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// triggerThreshold
    ///
    /// Description:   Threshold for the value monitor detection. The threshold is defined as the absolute difference between
    ///                metafilter output and reference baseline.
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT                      triggerThreshold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// consecutiveCountThreshold
    ///
    /// Description:   Counting threshold for the residue is constantly above/below the trigger_threshold. While
    ///                VM_DETECTOR_UNSTABLE is chosen, the counting threshold means the number of counts that residual(absolute
    ///                difference between signal and baseline) is above the threshold. While VM_DETECTOR_STABLE is chosen, the
    ///                counting threshold means the number of counts that residual (absolute difference between signal and
    ///                baseline) is below the threshold.
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                      consecutiveCountThreshold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// frameToArmed
    ///
    /// Description:   Number of frames for starting the scene change detection.
    /// Range:         [0,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                      frameToArmed;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// medianFltrCfg
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixMedianFltrCfgType medianFltrCfg;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// mvavgFltrCfg
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixMvavgFltrCfgType  mvavgFltrCfg;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// IIRFltrCfg
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixIirFltrCfgType    IIRFltrCfg;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAbsoluteModeCfgType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAbsoluteModeCfgType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// enable
    ///
    /// Description:   While absolute mode is enabled, i.e., enable=1, value monitor will use the the baseline value as a
    ///                reference baseline. While absolute is disabled, i.e., enable=0, value monitor will adaptively update
    ///                reference baseline according to the metafilter output (referring to frame2armed)
    /// Range:         [0,1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32 enable;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// baseline
    ///
    /// Description:   This parameter is utilized as absolute mode is enabled. While absolute mode is enabled, value monitor
    ///                will use this parameter as reference baseline.
    /// Range:         [unbounded,unbounded]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    FLOAT baseline;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixDetectorTypeEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixDetectorTypeEnum
{
    VMDetectorStable   = 0,
    VMDetectorUnstable = 1
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixVMSetTypeEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixVMSetTypeEnum
{
    VmSetTypeSADR                = 0,
    VmSetTypeSADPanning          = 1,
    VmSetTypeGyro                = 2,
    VmSetTypeGyroPanning         = 3,
    VmSetTypeDefocusLow          = 4,
    VmSetTypeDefocusHigh         = 5,
    VmSetTypeTOFConfidenceHigh   = 6,
    VmSetTypePDAFConfidence      = 7,
    VmSetTypeDistance            = 8,
    VmSetTypeFV                  = 9,
    VmSetTypeTOFConfidenceMedium = 10,
    VmSetTypeFaceTriggerHold     = 11,
    VmSetTypeCAFSceneChangeHold  = 12
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixValueMonitorType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixValueMonitorType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// VMSetType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixVMSetTypeEnum       VMSetType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// detectionType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixDetectorTypeEnum    detectionType;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// absoluteModeCfg
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAbsoluteModeCfgType absoluteModeCfg;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sensProfileLow
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixSensProfileType     sensProfileLow;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sensProfileMed
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixSensProfileType     sensProfileMed;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// sensProfileHigh
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixSensProfileType     sensProfileHigh;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixValueMonitorBankType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixValueMonitorBankType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// valueMonitor - Array
    /// Min Length:    1
    /// Max Length:    36
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32                     valueMonitorCount;
    UINT32                     valueMonitorID;
    chromatixValueMonitorType* valueMonitor;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoDefaultMixerType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTopoDefaultMixerType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// secondarySceneChangeCntThres
    ///
    /// Description:   Value for the CAF scene change count threshold.
    /// Range:         [0,10000]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            secondarySceneChangeCntThres;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// secondaryUnstableCntThres
    ///
    /// Description:   Value for the CAF unstable count threshold.
    /// Range:         [0,10000]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32            secondaryUnstableCntThres;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyroEnable
    ///
    /// Description:   Flag to enable gyro or not.
    /// Range:         [0, 1]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    afglobalelements::enable_flag_type gyroEnable;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoDCIAFEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixTopoDCIAFEnum
{
    DCIAFTopoProfileSimple   = 0,
    DCIAFTopoProfileAdvanced = 1,
    DCIAFTopoProfileMax      = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoDCIAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTopoDCIAFType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// profileIndex
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoDCIAFEnum profileIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// distance
    ///
    /// Description:   Sensitivity value for DCIAF distance value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  distance;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// confidence
    ///
    /// Description:   Sensitivity value for DCIAF confidence value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  confidence;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADR
    ///
    /// Description:   Sensitivity value for SADR value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  SADR;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyro
    ///
    /// Description:   Sensitivity value for gyro value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  gyro;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADPanning
    ///
    /// Description:   Sensitivity value for SAD panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  SADPanning;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyroPanning
    ///
    /// Description:   Sensitivity value for gyro panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                  gyroPanning;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoTOFEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixTopoTOFEnum
{
    TOFTopoProfileSimple   = 0,
    TOFTopoProfileAdvanced = 1,
    TOFTopoProfileMax      = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoTOFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTopoTOFType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// profileIndex
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoTOFEnum profileIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// distance
    ///
    /// Description:   Sensitivity value for distance value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                distance;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// TOFconfidenceHigh
    ///
    /// Description:   Sensitivity value for TOFconfidenceHigh value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                TOFconfidenceHigh;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// TOFconfidenceMedium
    ///
    /// Description:   Sensitivity value for TOFconfidenceMedium value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                TOFconfidenceMedium;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADPanning
    ///
    /// Description:   Sensitivity value for SAD panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                SADPanning;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyroPanning
    ///
    /// Description:   Sensitivity value for gyro panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                gyroPanning;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoPDAFEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixTopoPDAFEnum
{
    PDAFTopoProfileSparse         = 0,
    PDAFTopoProfile2PD            = 1,
    PDAFTopoProfileSparseAdvanced = 2,
    PDAFTopoProfile2PDAdvanced    = 3,
    PDAFTopoProfileAdvanced       = 4,
    PDAFTOPOProfileMAX            = 5
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoPDAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTopoPDAFType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// profileIndex
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoPDAFEnum profileIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// defocusLow
    ///
    /// Description:   Sensitivity value for defocusLow value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                 defocusLow;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// defocusHigh
    ///
    /// Description:   Sensitivity value for defocusHigh value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                 defocusHigh;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// PDAFconfidence
    ///
    /// Description:   Sensitivity value for PDAFconfidence value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                 PDAFconfidence;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADPanning
    ///
    /// Description:   Sensitivity value for SAD panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                 SADPanning;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyroPanning
    ///
    /// Description:   Sensitivity value for gyro panning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                 gyroPanning;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoCAFEnum
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
enum class chromatixTopoCAFEnum
{
    CAFTopoProfileSimple   = 0,
    CAFTopoProfileAdvanced = 1,
    CAFTopoProfileMax      = 2
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixTopoCAFType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixTopoCAFType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// profileIndex
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoCAFEnum profileIndex;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADR
    ///
    /// Description:   Sensitivity value for SADR value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                SADR;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyro
    ///
    /// Description:   Sensitivity value for gyro value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                gyro;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// gyroPanning
    ///
    /// Description:   Sensitivity value for gyroPanning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                gyroPanning;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// SADPanning
    ///
    /// Description:   Sensitivity value for SADPanning value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                SADPanning;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// FV
    ///
    /// Description:   Sensitivity value for FV value monitor.
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                FV;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// faceTriggerHold
    ///
    /// Description:   Sensitivity value for faceTriggerHold value monitor
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                faceTriggerHold;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// CAFSceneChangeHold
    ///
    /// Description:   Sensitivity value for CAFSceneChangeHold value monitor
    /// Range:         [0, 100]
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    INT32                CAFSceneChangeHold;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixMonitorAlgoConfigType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixMonitorAlgoConfigType
{

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// topoCAF
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoCAFType          topoCAF;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// topoPDAF
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoPDAFType         topoPDAF;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// topoTOF
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoTOFType          topoTOF;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// topoDCIAF
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoDCIAFType        topoDCIAF;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// topoDefaultMixer
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixTopoDefaultMixerType topoDefaultMixer;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFMONITORType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
struct chromatixAFMONITORType
{
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Binary file symbol table entry ID
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    UINT32 SymbolTableID;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// module_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct module_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } module_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// parameter_version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    struct parameter_versionStruct
    {
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /// Binary file symbol table entry ID
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        UINT32 SymbolTableID;
        INT32 major_revision;
        INT32 minor_revision;
    } parameter_version;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// monitorAlgoConfig
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixMonitorAlgoConfigType monitorAlgoConfig;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// valueMonitorBank
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixValueMonitorBankType  valueMonitorBank;
};

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// chromatixAFMONITORTypeClass
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
class chromatixAFMONITORTypeClass : public ParameterModule, public chromatixAFMONITORType
{
public:
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Version
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const UINT16 MAJOR = 3;
    static const UINT16 MINOR = 4;
    static const UINT32 PATCH = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Default Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFMONITORTypeClass(
        const CHAR* name);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    chromatixAFMONITORTypeClass(
        const CHAR* name,
        UINT32 modeId,
        UINT16 mode,
        UINT16 subMode,
        UINT32 group);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Destructor
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ~chromatixAFMONITORTypeClass();

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// GetName
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static const CHAR* GetName(
        const CHAR* type);


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixIirFltrCfgType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixIirFltrCfgType(
        ParameterFileSymbolTableEntry* entry,
        chromatixIirFltrCfgType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixMvavgFltrCfgType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixMvavgFltrCfgType(
        ParameterFileSymbolTableEntry* entry,
        chromatixMvavgFltrCfgType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixMedianFltrCfgType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixMedianFltrCfgType(
        ParameterFileSymbolTableEntry* entry,
        chromatixMedianFltrCfgType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixSensProfileType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixSensProfileType(
        ParameterFileSymbolTableEntry* entry,
        chromatixSensProfileType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAbsoluteModeCfgType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAbsoluteModeCfgType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAbsoluteModeCfgType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixValueMonitorType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixValueMonitorType(
        ParameterFileSymbolTableEntry* entry,
        chromatixValueMonitorType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixValueMonitorBankType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixValueMonitorBankType(
        ParameterFileSymbolTableEntry* entry,
        chromatixValueMonitorBankType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTopoDefaultMixerType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTopoDefaultMixerType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTopoDefaultMixerType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTopoDCIAFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTopoDCIAFType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTopoDCIAFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTopoTOFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTopoTOFType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTopoTOFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTopoPDAFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTopoPDAFType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTopoPDAFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixTopoCAFType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixTopoCAFType(
        ParameterFileSymbolTableEntry* entry,
        chromatixTopoCAFType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixMonitorAlgoConfigType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixMonitorAlgoConfigType(
        ParameterFileSymbolTableEntry* entry,
        chromatixMonitorAlgoConfigType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load chromatixAFMONITORType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL LoadchromatixAFMONITORType(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFMONITORType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load module_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadmodule_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFMONITORType::module_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Load parameter_versionStruct
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static BOOL Loadparameter_versionStruct(
        ParameterFileSymbolTableEntry* entry,
        chromatixAFMONITORType::parameter_versionStruct* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixValueMonitorBankType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixValueMonitorBankType(
        chromatixValueMonitorBankType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Unload chromatixAFMONITORType
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    static void UnloadchromatixAFMONITORType(
        chromatixAFMONITORType* structure);

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Parse symbol table entry, and return a new object
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    virtual ParameterModule* Parse(
        ParameterSetManager* manager,
        ParameterFileSymbolTableEntry* entry) const;

}; // End class chromatixAFMONITORTypeClass

AFMONITORELEMENTS_NAMESPACE_END
#endif // AFMONITORELEMENTS_H

